library(ggplot2)
library(plotly)

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
par(mfrow=c(2,3))
plot(x,y, pch=20)
plot(x,y, pch=20)
abline(h=0.5, col='red')
plot(x,y, pch=20)
abline(v=0.5, col='red')
abline(h=0.5, col='red')
plot(x,y, pch=20)
abline(v=0.33, col='red')
abline(h=0.33, col='red')
abline(v=0.66, col='red')
abline(h=0.66, col='red')
plot(x,y, pch=20)
abline(v=0.25, col='red')
abline(h=0.25, col='red')
abline(v=0.50, col='red')
abline(h=0.50, col='red')
abline(v=0.75, col='red')
abline(h=0.75, col='red')
plot(x,y, pch=20)
abline(v=0.2, col='red')
abline(h=0.2, col='red')
abline(v=0.40, col='red')
abline(h=0.40, col='red')
abline(v=0.6, col='red')
abline(h=0.6, col='red')
abline(v=0.8, col='red')
abline(h=0.8, col='red')
rotate <- function(x) t(apply(x, 2, rev))
matrizAsociadaProbabilidad=function(x,y, xmin, xmax, ymin, ymax, tamanio){
  m = matrix(0, ncol=tamanio, nrow=tamanio)
  for(punInd in c(1:length(x))){ #Por cada punto
    for(c in c(1:ncol(m))){
      stepX = (xmax-xmin)/tamanio
      if(x[punInd]<stepX*c+xmin & x[punInd]>stepX*(c-1)+xmin ){
        #Pertenece a columna c-esima
        for(f in c(1:nrow(m))){
          stepY = (ymax-ymin)/tamanio
          if(y[punInd]<stepY*f+xmin & y[punInd]>stepY*(f-1)+xmin ){
            m[c,f] = m[c,f]+1
            f = nrow(m)
            c = ncol(m)
          }
        }
      }
      #segui buscando tu columna
    }
  }
  return((rotate(rotate(rotate(m/length(x))))))
}
rango = 0.015
totx = c()
toty = c()
for (j in c(1:20000)) {
  x= runif(2, 0.49, 0.51)
  y = runif(2, 0.49, 0.51)
  for (i in c(2:250)) {
    x[i] = x[i-1]+runif(1,-rango,rango) 
    y[i] = y[i-1]+runif(1,-rango,rango) 
  }
  totx[j]=x[length(x)]
  toty[j]=y[length(y)]
}
x = totx
y = toty
m = matrizAsociadaProbabilidad(x,y, 0,1,0,1, 90)
m
      [,1] [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]   [,11] [,12] [,13]   [,14]   [,15]   [,16]   [,17]   [,18]   [,19]   [,20]   [,21]
 [1,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [2,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [3,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [4,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [5,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [6,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000
 [7,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005
 [8,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [9,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[10,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[11,]    0    0 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0.00000 0e+00 0e+00 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000
        [,22]   [,23]   [,24]   [,25]   [,26]   [,27]   [,28]   [,29]   [,30]   [,31]   [,32]   [,33]   [,34]   [,35]   [,36]   [,37]   [,38]   [,39]
 [1,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [2,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [3,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000
 [4,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000
 [5,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [6,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [7,] 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [8,] 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00005 0.00000 0.00000 0.00000
 [9,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[10,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005
[11,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00005 0.00000 0.00005 0.00000 0.00010
        [,40]   [,41]   [,42]   [,43]   [,44]   [,45]   [,46]   [,47]   [,48]   [,49]   [,50]   [,51]   [,52]   [,53]   [,54]   [,55]   [,56]   [,57]
 [1,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [2,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [3,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [4,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [5,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [6,] 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [7,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00005 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [8,] 0.00000 0.00000 0.00005 0.00000 0.00000 0.00005 0.00005 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [9,] 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00005 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[10,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000
[11,] 0.00010 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000
        [,58]   [,59]   [,60]   [,61]   [,62]   [,63]   [,64]   [,65]   [,66]   [,67]   [,68]   [,69]   [,70]   [,71]   [,72]   [,73]   [,74]   [,75]
 [1,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [2,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [3,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [4,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [5,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [6,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000
 [7,] 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [8,] 0.00000 0.00000 0.00000 0.00000 0.00005 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
 [9,] 0.00000 0.00000 0.00005 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[10,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
[11,] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00005 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
        [,76]   [,77]   [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90]
 [1,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [2,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [3,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [4,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [5,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [6,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [7,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [8,] 0.00000 0.00005 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [9,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
[10,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
[11,] 0.00000 0.00000 0.00000 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
 [ reached getOption("max.print") -- omitted 79 rows ]
plot(x,y, xlim=c(0,1), ylim=c(0,1))

evaluarEnMatriz=function(m,x,y, xmin, xmax, ymin, ymax, tamanio){
    for(c in c(1:ncol(m))){
      stepX = (xmax-xmin)/tamanio
      if(x<stepX*c+xmin & x>stepX*(c-1)+xmin ){
        #Pertenece a columna c-esima
        for(f in c(1:nrow(m))){
          stepY = (ymax-ymin)/tamanio
          if(y<stepY*f+xmin & y>stepY*(f-1)+xmin ){
            return(m[c,f])
          }
        }
      }
  }
}
evaluarEnMatriz(m, 0.72,0.51,0,1,0,1,10)
z = c(1:length(x))
for (i in 1:length(x)) {
  #print(x[i])

  if(is.null(x[i])){
    x[i]=0.5
  }
  if(is.null(y[i])){
    y[i]=0.5
  }
  if(x[i]>=1){
    x[i]=0.99
  }
  if(x[i]<=0){
    x[i]=0.01
  }
  if(y[i]>=1){
    y[i]=0.99
  }
  if(y[i]<=0){
    y[i]=0.01
  }
  #print(i)
  z[i]= evaluarEnMatriz(m, x[i],y[i],0,1,0,1,90)
}
xs = x
ys = y
zs = z
fig <- plot_ly(x=~xs, y=~ys, z=~zs, type="scatter3d", mode="markers",  size = 1)
fig <- fig %>% layout(title = '3 zonas distribuicion',
         xaxis = list(title = 'Superficie cubierta',
                      zeroline = TRUE,
                      range = c(0, 250)),
         yaxis = list(title = 'Habitaciones',
                      range = c(0,1400)))

fig
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHBsb3RseSkKYGBgCgoKYGBge3J9CnBhcihtZnJvdz1jKDIsMykpCnBsb3QoeCx5LCBwY2g9MjApCnBsb3QoeCx5LCBwY2g9MjApCmFibGluZShoPTAuNSwgY29sPSdyZWQnKQpwbG90KHgseSwgcGNoPTIwKQphYmxpbmUodj0wLjUsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC41LCBjb2w9J3JlZCcpCnBsb3QoeCx5LCBwY2g9MjApCmFibGluZSh2PTAuMzMsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC4zMywgY29sPSdyZWQnKQphYmxpbmUodj0wLjY2LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNjYsIGNvbD0ncmVkJykKcGxvdCh4LHksIHBjaD0yMCkKYWJsaW5lKHY9MC4yNSwgY29sPSdyZWQnKQphYmxpbmUoaD0wLjI1LCBjb2w9J3JlZCcpCmFibGluZSh2PTAuNTAsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC41MCwgY29sPSdyZWQnKQphYmxpbmUodj0wLjc1LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNzUsIGNvbD0ncmVkJykKcGxvdCh4LHksIHBjaD0yMCkKYWJsaW5lKHY9MC4yLCBjb2w9J3JlZCcpCmFibGluZShoPTAuMiwgY29sPSdyZWQnKQphYmxpbmUodj0wLjQwLCBjb2w9J3JlZCcpCmFibGluZShoPTAuNDAsIGNvbD0ncmVkJykKYWJsaW5lKHY9MC42LCBjb2w9J3JlZCcpCmFibGluZShoPTAuNiwgY29sPSdyZWQnKQphYmxpbmUodj0wLjgsIGNvbD0ncmVkJykKYWJsaW5lKGg9MC44LCBjb2w9J3JlZCcpCmBgYApgYGB7cn0Kcm90YXRlIDwtIGZ1bmN0aW9uKHgpIHQoYXBwbHkoeCwgMiwgcmV2KSkKYGBgCgpgYGB7cn0KbWF0cml6QXNvY2lhZGFQcm9iYWJpbGlkYWQ9ZnVuY3Rpb24oeCx5LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4LCB0YW1hbmlvKXsKICBtID0gbWF0cml4KDAsIG5jb2w9dGFtYW5pbywgbnJvdz10YW1hbmlvKQogIGZvcihwdW5JbmQgaW4gYygxOmxlbmd0aCh4KSkpeyAjUG9yIGNhZGEgcHVudG8KICAgIGZvcihjIGluIGMoMTpuY29sKG0pKSl7CiAgICAgIHN0ZXBYID0gKHhtYXgteG1pbikvdGFtYW5pbwogICAgICBpZih4W3B1bkluZF08c3RlcFgqYyt4bWluICYgeFtwdW5JbmRdPnN0ZXBYKihjLTEpK3htaW4gKXsKICAgICAgICAjUGVydGVuZWNlIGEgY29sdW1uYSBjLWVzaW1hCiAgICAgICAgZm9yKGYgaW4gYygxOm5yb3cobSkpKXsKICAgICAgICAgIHN0ZXBZID0gKHltYXgteW1pbikvdGFtYW5pbwogICAgICAgICAgaWYoeVtwdW5JbmRdPHN0ZXBZKmYreG1pbiAmIHlbcHVuSW5kXT5zdGVwWSooZi0xKSt4bWluICl7CiAgICAgICAgICAgIG1bYyxmXSA9IG1bYyxmXSsxCiAgICAgICAgICAgIGYgPSBucm93KG0pCiAgICAgICAgICAgIGMgPSBuY29sKG0pCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgICNzZWd1aSBidXNjYW5kbyB0dSBjb2x1bW5hCiAgICB9CiAgfQogIHJldHVybigocm90YXRlKHJvdGF0ZShyb3RhdGUobS9sZW5ndGgoeCkpKSkpKQp9CmBgYApgYGB7cn0KcmFuZ28gPSAwLjAxNQp0b3R4ID0gYygpCnRvdHkgPSBjKCkKZm9yIChqIGluIGMoMToyMDAwMCkpIHsKICB4PSBydW5pZigyLCAwLjQ5LCAwLjUxKQogIHkgPSBydW5pZigyLCAwLjQ5LCAwLjUxKQogIGZvciAoaSBpbiBjKDI6MjUwKSkgewogICAgeFtpXSA9IHhbaS0xXStydW5pZigxLC1yYW5nbyxyYW5nbykgCiAgICB5W2ldID0geVtpLTFdK3J1bmlmKDEsLXJhbmdvLHJhbmdvKSAKICB9CiAgdG90eFtqXT14W2xlbmd0aCh4KV0KICB0b3R5W2pdPXlbbGVuZ3RoKHkpXQp9CnggPSB0b3R4CnkgPSB0b3R5CmBgYApgYGB7cn0KbSA9IG1hdHJpekFzb2NpYWRhUHJvYmFiaWxpZGFkKHgseSwgMCwxLDAsMSwgOTApCm0KcGxvdCh4LHksIHhsaW09YygwLDEpLCB5bGltPWMoMCwxKSkKYGBgCgpgYGB7cn0KZXZhbHVhckVuTWF0cml6PWZ1bmN0aW9uKG0seCx5LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4LCB0YW1hbmlvKXsKICAgIGZvcihjIGluIGMoMTpuY29sKG0pKSl7CiAgICAgIHN0ZXBYID0gKHhtYXgteG1pbikvdGFtYW5pbwogICAgICBpZih4PHN0ZXBYKmMreG1pbiAmIHg+c3RlcFgqKGMtMSkreG1pbiApewogICAgICAgICNQZXJ0ZW5lY2UgYSBjb2x1bW5hIGMtZXNpbWEKICAgICAgICBmb3IoZiBpbiBjKDE6bnJvdyhtKSkpewogICAgICAgICAgc3RlcFkgPSAoeW1heC15bWluKS90YW1hbmlvCiAgICAgICAgICBpZih5PHN0ZXBZKmYreG1pbiAmIHk+c3RlcFkqKGYtMSkreG1pbiApewogICAgICAgICAgICByZXR1cm4obVtjLGZdKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogIH0KfQpgYGAKCmBgYHtyfQpldmFsdWFyRW5NYXRyaXoobSwgMC43MiwwLjUxLDAsMSwwLDEsMTApCmBgYAoKCmBgYHtyfQp6ID0gYygxOmxlbmd0aCh4KSkKZm9yIChpIGluIDE6bGVuZ3RoKHgpKSB7CiAgI3ByaW50KHhbaV0pCgogIGlmKGlzLm51bGwoeFtpXSkpewogICAgeFtpXT0wLjUKICB9CiAgaWYoaXMubnVsbCh5W2ldKSl7CiAgICB5W2ldPTAuNQogIH0KICBpZih4W2ldPj0xKXsKICAgIHhbaV09MC45OQogIH0KICBpZih4W2ldPD0wKXsKICAgIHhbaV09MC4wMQogIH0KICBpZih5W2ldPj0xKXsKICAgIHlbaV09MC45OQogIH0KICBpZih5W2ldPD0wKXsKICAgIHlbaV09MC4wMQogIH0KICAjcHJpbnQoaSkKICB6W2ldPSBldmFsdWFyRW5NYXRyaXoobSwgeFtpXSx5W2ldLDAsMSwwLDEsOTApCn0KYGBgCgpgYGB7cn0KeHMgPSB4CnlzID0geQp6cyA9IHoKZmlnIDwtIHBsb3RfbHkoeD1+eHMsIHk9fnlzLCB6PX56cywgdHlwZT0ic2NhdHRlcjNkIiwgbW9kZT0ibWFya2VycyIsICBzaXplID0gMSkKZmlnIDwtIGZpZyAlPiUgbGF5b3V0KHRpdGxlID0gJzMgem9uYXMgZGlzdHJpYnVpY2lvbicsCiAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICdTdXBlcmZpY2llIGN1YmllcnRhJywKICAgICAgICAgICAgICAgICAgICAgIHplcm9saW5lID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgIHJhbmdlID0gYygwLCAyNTApKSwKICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gJ0hhYml0YWNpb25lcycsCiAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IGMoMCwxNDAwKSkpCgpmaWcKYGBgCgoK